// Package order_by_hot 1_102
// @Title order_by_hot
// @Description
// @Author  == 琳琳也叫王木木 ==  2021/9/3 16:24
// @Create  2021/9/3 16:24
package order_by_hot

// LevelOrderPlus 进阶版本的分层 打印二叉树 核心思路 两个队列
func LevelOrderPlus(root *TreeNode) [][]int {
	res := make([][]int, 0)
	if root == nil {
		return res
	}
	queue := []*TreeNode{root} // 队列
	for i := 0; len(queue) > 0; i++ {
		p := []*TreeNode{}
		res = append(res, []int{}) // 第一步 二维数组中添加一个空数组
		for j := 0; j < len(queue); j++ {
			temp := queue[j]
			res[i] = append(res[i], temp.Val)
			if temp.Left != nil {
				p = append(p, temp.Left)
			}
			if temp.Right != nil {
				p = append(p, temp.Right)
			}
		}
		queue = p
	}
	return res
}

// LevelOrder 基础版的层序遍历二叉树
func LevelOrder(root *TreeNode) []int {
	if root == nil {
		return nil
	}
	ans := []int{}
	queue := []*TreeNode{root}
	for i := 0; len(queue) > 0; i++ {
		temp := queue[0]
		queue = queue[1:]
		ans = append(ans, temp.Val)
		if temp.Left != nil {
			queue = append(queue, temp.Left)
		}
		if temp.Right != nil {
			queue = append(queue, temp.Right)
		}
	}
	return ans
}
